// createStore: 方法 用来生成store实力对象（和之前的new Vuex.Store一样）
import { createStore } from 'vuex'

// 使用vuex-persistedstate插件来进行持久化
import createPersistedstate from 'vuex-persistedstate'
import Cookies from 'js-cookie'

import user from './modules/user'
import cart from './modules/cart'
import category from './modules/category'
export default createStore({
  // // 定义数据
  // state: {
  // },
  // // 定义同步方法
  // mutations: {
  // },
  // // 定义异步方法
  // actions: {
  // },
  // 模块化入口
  modules: {
    user,
    cart,
    category
  },
  plugins: [
    // 修改state中的数据即可触发同步机制，可以看到本地存储数据的的变化，**每次修改只要数据变了就会自动把vuex同步到ls；刷新的时候会自动从ls取然后同步到vuex**

    // 默认存储
    // createPersistedstate({
    //   // 修改该插件的数据项存储方式为sessionStorage
    //   // storage: window.sessionStorage,
    //   // key是存储数据的键名，支持自定义语义化即可
    //   key: 'erabbit-client-pc-store',
    //   // paths是存储state中的那些数据，如果是模块下具体的数据需要加上模块名称，如`user.token`
    //   paths: ['user', 'cart']
    // })

    // 使用cookies存储
    createPersistedstate({
      storage: {
        getItem: key => Cookies.get(key),
        setItem: (key, value) => Cookies.set(key, value, { expires: 7 }),
        removeItem: key => Cookies.remove(key)
      },
      key: 'erabbit-client-pc-store',
      paths: ['user', 'cart']
    })
  ]
})
